using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
namespace Entidades
{
    public class Categoria
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Categoria), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Categoria), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Categoria), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Categoria), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Categoria), ";
        private int _Id;
        private string _Categoria;
        

        private int _IdCategoriaPadre;
        #region "Propiedades"
        public int Id
        {
            get { return _Id; }
            set { _Id = value; }
        }
        public string strCategoria
        {
            get { return _Categoria; }
            set { _Categoria = value; }
        }
        public int IdCategoriaPadre
        {
            get { return _IdCategoriaPadre; }
            set { _IdCategoriaPadre = value; }
        }

        private int? cantidadPublicaciones;

        public int CantidadPublicaciones
        {
            get
            {
                if (!cantidadPublicaciones.HasValue)
                {
                    cantidadPublicaciones = Postulacion.getCantidadPorCategoria(_Id);
                }
                return cantidadPublicaciones.Value;
            }
        }

        #endregion
        #region "Lazys"

        public static void obtenerPostulaciones(ref List<Postulacion> lista, int IdCategoria, int pagina, int cantxPagina, ref int Paginas)
        {
            try
            {
                Postulacion.getAllByIdCategoria(ref lista, IdCategoria, pagina, cantxPagina, ref Paginas);
            }
            catch (Exception ex)
            {
                throw new Exception("ErrorDeLazyLoad(Postulacion)" + ex.Message);
            }
        }

        #endregion
        public Categoria()
        {
        }
        public Categoria(int Id)
        {
            Categoria Categoria = traerUno(Id);
            this._Id = Categoria.Id;
            this._Categoria = Categoria.strCategoria;
            this._IdCategoriaPadre = Categoria.IdCategoriaPadre;
        }

        #region "Metodos Publicos"
        public void Alta()
        {
            try
            {
                validaAlta();
                DALCategoria.Alta(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public void Baja()
        {
            try
            {
                validaBaja();
                DALCategoria.Baja(_Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public void Modificar()
        {
            try
            {
                validaModificacion();
                DALCategoria.Modificar(this);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        #region "Metodos Estaticos"
        private Categoria traerUno(int Id)
        {
            try
            {
                return DALCategoria.traerUno(Id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerUno + ex.Message);
            }
        }
        public static List<Categoria> TraerTodos()
        {
            try
            {
                return DALCategoria.TraerTodos();
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }
        public static List<Categoria> GetSubcategorias(int idCategoriaPAdre)
        {
            try
            {
                return DALCategoria.GetSubcategorias(idCategoriaPAdre);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }

        public static List<Categoria> GetPadres(int id)
        {
            try
            {
                return DALCategoria.GetPadres(id);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorTraerTodos + ex.Message);
            }
        }



        #region "Lazys"
        #endregion
        #endregion
        #endregion
        #region "Metodos Privados"
        private void validaAlta()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")


        }
        private void validaBaja()
        {
            //lanza excepcion si no valida
        }
        private void validaModificacion()
        {
            //lanza excepcion si no valida
            //ej If _Descripcion = " Then Throw New Exception("la descripcion no debe estar vacia")
            validaAlta();
        }
        #endregion



        public static List<Categoria> GetSubcategoriasPorProvincia(int value, int IdProvincia)
        {
            throw new NotImplementedException();
        }
    }
}
